perm filename BIGPLA.FAI[MUS,SYS] blob
sn#170431 filedate 1975-07-29 generic text, type T, neo UTF8
00200 TITLE SOUND; DOROTHY BENDER ****** 1969, 1975(LCS)*******
00400
00600 ; ROUTINE TO READ THE OUTPUT FROM THE MUSIC
00800 ; PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
01000 ;
01200 ; NAME OF THE FILE TO BE INPUTTED IS 'MUSIC.MUS' OR 'MUSAA.DMD',
01400 ; THE FIRST RECORD OF WHICH CONTAINS THE
01600 ; NUMBER OF WORDS OF DATA IN THE ENTIRE DISK FILE.
01800
02000 A ← 1 ;WORK
02200 B ← 2 ;WORK
02400 RET ← 3 ;RETURN ACCUMULATOR
02600 ;;BUFSIZ ←=20224 ;****** DOUBLE THIS FOR 4-CHANNEL SOUND!!!!!
02800 BUFSIZ ←4400*10 ;BIGPLAY -----(←4400*3 IN SYS VERSION)
03000 ↓DSKCHN ←1 ;DISK CHANNEL FOR INPUT
03200 ↓ADCHN ←2 ;D-A CHANNEL FOR OUTPUT
03400
03600 OPDEF READCH [51B8]
03800 OPDEF MESSAGE[51B8!3B12]
04000
04200 BEG: CALLI 0,0 ;RESET I/O DEVICES
04400 OPEN DSKCHN,[17 ;MODE
04600 'DSK ' ;DEVICE NAME
04800 0] ;NO BUFFER HEADERS
05000 HALT BEG ;RESTART IF DEVICE IS UNAVAILABLE
05200
05400 MOVE 6,['MUSAA ']
05600 MOVE 7,['DMD ']
05800 SETZM DIR2+3 ;FOR RESTART
06000 SETZM DIR+3 ;FOR RESTART
06200 OUTSTR[ASCIZ/FILE NAME -- /] ;READS '.DMD' FILES ONLY.
06400 SETZM DIR+1
06600 SETZM DIR
06800 SETO 5, ;FLAG FOR EXTENSIONS
07000 MOVE 2,[POINT 6,DIR]
07200 JRST GOT
07400 EXT: MOVE 2,[POINT 6,DIR+1]
07600 SETZ 5,
07800 GOT: INCHWL 1
08000 CAIN 1,15 ; A CR?
08200 JRST GOT
08400 CAIGE 1,60 ; CHECKS FOR GOOD CHARS.
08600 JRST LX
08800 SUBI 1,40
09000 IDPB 1,2
09200 JRST GOT
09400 LX: JUMPE 5,LZ
09600 SKIPN DIR
09800 MOVEM 6,DIR
10000 CAIN 1,56 ; 56='.'
10200 JRST EXT
10400 JRST MESS
10600 LZ: SKIPN DIR+1
10800 MOVEM 7,DIR+1
13000 ;FIND OUT NUMBER OF CHANNELS AND THE SPEED.
13400 MESS: MESSAGE [ASCIZ/ HOW MANY CHANNELS? /]
13600 READCH A
13800 SUBI A,"0"+1 ;CONVERT TO BINR AND ADD 1
14000 DPB A,[POINT 2,OUTBIT,26]
14200
14400 SPD: MESSAGE [ASCIZ/ SPEED? /]
14600 READCH A
14800 CAIG A,65 ;IS IT 1 - 5?
15000 JRST SPD2 ;YES
15200 SKIPN DIR+3 ;IS THIS THE 1ST TIME THRU?
15400 JRST SPD ;YES, SO WE NEED A GOOD NUM.
15600 JRST PLA2 ;ANYTHING ELSE WILL REPLAY
15800 SPD2: SUBI A,"0"
16000 DPB A,[POINT 3,OUTBIT,32]
16200
16400 PLA2: SETZM DIR+3
16500 SETZM DIR2+3
16510 MOVE 5,DMD ;GET 'DMD '
16600 LOOKUP DSKCHN,DIR
16700 SKIPA ;CAN'T FIND MUSAA.DMD
16800 JRST XOPEN ;FOUND IT
16860 CAMN 5,DIR+1 ;IS DIR+1='DMD '?
16870 JRST MUS ;YES, GO LOOK FOR MUSIC.MUS
16880 MOVEM 5,DIR+1
16890 JRST PLA2 ;TRY IT WITH 'DMD '
16900 MUS: LOOKUP DSKCHN,DIR2 ;TRY FOR MUSIC.MUS
17000
17100 JRST [MESSAGE[ASCIZ/
17200 *** MUSIC FILE NOT FOUND/]
17300 CALLI 12]
17400 ;EXIT IF FILE IS MISSING
17500 MOVE A,DIR2+3 ;GET LENGTH OF MUSIC.MUS
17600 MOVEM A,DIR+3;PUT IT IN RIGHT PLACE
19000
21000 XOPEN: OPEN ADCHN,[117 ;MODE
21200 'AD ' ;DEVICE NAME
21400 0] ;NO BUFFER HEADERS
21600
21800 JRST [MESSAGE[ASCIZ/
22000 ***D-A NOT AVAILABLE/]
22200 CALLI 12]
22400 ;EXIT IF D-A IS UNAVAILABLE
22600
22610 XGPOK: MOVSI 'XGP' ;DOWN TO SPWAR FOR XGP CONFLICT.
22631 DEVUSE 0,
22652 HLRZ 0,0
22673 CAIN 400000
22694 JRST SPWAR
22715 INIT 16,17
22736 SIXBIT .XGP.
22757 0
22778 JRA 16,2(16)
22800 SPWAR: LOCK A,
23000 ;; SPCWAR 17,[CALLI]
23200 MESSAGE [ASCIZ/ GO? /]
23400 READCH A
23600
23800
24000 LNTH: movs a,DIR+3 ;get length of file.
24200 movnm a,nwd
24400 ;-----------------------------------------------------
24600
24800 ;BEGIN MAIN BODY OF PROGRAM
25000
25200 LOOP: JSP RET,SUB ;ROUTINE TO READ AND WRITE
25400 BUF1-1 ;USE BUF1 FOR THE I/O
25600 JUMPLE B,OUT ;DONE
25800
26000 JSP RET,SUB ;CALL IT AGAIN
26200 BUF2-1 ;USE BUF2 FOR THE I/O
26400 JUMPG B,LOOP ;GO BACK FOR MORE IF B>0
26600
26800 OUT: close dskchn, ;END OF PROGRAM.
27000 releas adchn,
27200 ;; SPCWAR 0,'SSW'
27400 UNLOCK
27600 RELEASE 16,
27800 jrst SPD
28000
28200 ;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
28400 ; 1(RET) WILL BE THE RETURN
28600 ; 0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
28800 ; PUT IN THE RIGHT HALF OF THE IOWD.
29000 ; A WILL BE A WORK REGISTER
29200 ; B WILL BE TESTED ON THE OUTSIDE.
29400
29600 SUB: MOVNI A,BUFSIZ ;PICK UP AND COMPLEMENT BUFSIZ
29800 ADDB A,NWD ;A←NWD-BUFSIZ
30000 ;NWD←NWD-BUFSIZ
30200 MOVE B,A ;SAVE B TO BE TESTED FOR LAST
30400 ;TIME.
30600 JUMPL A,LAST ;SET UP FOR LAST TIME.
30800 MOVEI A,0
31000
31200 ;THE IOWD LOOKS LIKE:
31400 ; [-BUFSIZ / BUFI-1]
31600
31800 LAST: ADDI A,BUFSIZ
32000 MOVNS A ;COMPLEMENT A
32200 HRL A,0(RET) ;PICK UP BUFI AND MOVE IT
32400 ;TO THE LEFT SIDE OF A.
32600 MOVSM A,INLIST ;SWAP A AND MOVE IT.
32800 MOVSM A,OUTWC ;SAME FOR OUTPUT.
33000 INPUT DSKCHN,INLIST ;READ A RECORD.
33200 OUTPUT ADCHN,OUTWC ;WRITE THE RECORD.
33400 JRST 1(RET) ;RETURN
33600 ;---------------------------------------------------------
33800
34000 ; STORAGE:
34200
34400 NWD: 0 ;FOR NUMBER OF WORDS OF INPUT.
34600 ↓BUF1: BLOCK BUFSIZ+1 ;BUFFER 1
34800 BUF2: BLOCK BUFSIZ+1 ;BUFFER 2
35000
35010 DMD: 'DMD '
35200 DIR2: 'MUSIC ' ;FILENAME FOR INPUT
35400 'MUS ' ;EXTENSION
35600 0 ;INFORMATION ON FILE
35800 0 ;PROJECT PROG#
36000 DIR: 0 ;NAME
36200 0 ;EXTENSION
36400 0 ;INFORMATION ON FILE
36600 0 ;PROJECT PROG#
36800 CLIST: IOWD 1,NWD ;FOR THE FIRST RECORD
37000 0
37200 INLIST: 0 ;WILL CONTAIN AN IOWD
37400 0
37600 OUTWC: 0 ;WILL CONTAIN AN IOWD FOR D-A
37800 3650 ;MAGIC BITS FOR 136.
38000 OUTBIT: 4000 ;BITS FOR D-A
38200 BLOCK 2
38400
38800
39000 A←1
39200 B←2
39400 D←3
39800
40200 ichn←adchn
45600
45800 END BEG